package com.myqf.d3_多线程.作业.龟兔赛跑;

import lombok.SneakyThrows;

/*
1.多线程模拟龟兔赛跑：
规则：龟兔同时起步，每10毫秒秒跑1米，终点为100米,兔子跑步的能力强，乌龟跑步的能力弱
途中： 1.兔子跑到10米的时候,谦让乌龟一下，接着跑
2.兔子跑到50米的时候，再让龟1毫秒,接着跑
3.兔子跑到80米的时候，睡了50毫秒，接着跑
分析： 兔子跑步的能力强，乌龟跑步的能力弱（优先级的设置）
1.兔子跑到10米的时候,谦让乌龟一下，接着跑（yield方法）
2.兔子跑到50米的时候，再让龟1毫秒,接着跑（sleep方法）
3.兔子跑到80米的时候，睡了50毫秒，接着跑（sleep方法）
4.乌龟全程没有停留
 */
public class Test {
    public static void main(String[] args) {

        Thread t1 = new Thread(new Runnable() {
            @SneakyThrows
            @Override
            public void run() {

                for (int i = 1; i < 100; i++) {
                    if (i == 10) {
                        Thread.yield();
                        System.out.println(Thread.currentThread().getName()+"   让步");
                    }
                    if (i == 50) {
                        Thread.sleep(1);
                        System.out.println(Thread.currentThread().getName()+"   睡觉1毫秒");
                    }
                    if (i == 80) {
                        Thread.sleep(50);
                        System.out.println(Thread.currentThread().getName()+"   睡觉50毫秒");
                    }
                    Thread.sleep(10);
                    System.out.println(Thread.currentThread().getName()+"跑出1米   当前在"+i+"米");
                }
            }
        },"兔子");
        t1.setPriority(10);
        t1.start();

        Thread t2 = new Thread(new Runnable() {
            @SneakyThrows
            @Override
            public void run() {
                for (int i = 1; i < 100; i++) {
                    Thread.sleep(10);
                    System.out.println(Thread.currentThread().getName()+"跑出1米   当前在"+i+"米");
                }
            }
        },"乌龟");
        t2.setPriority(1);
        t2.start();

    }

}
